#include "BombaPlanta.h"
#include "Coordenada.h"
#include "IOcupante.h"
#include "Mapa.h"
#include "Aliado.h"
#include "Enemigo.h"

BombaPlanta::BombaPlanta(){
}

BombaPlanta::BombaPlanta(int vel, Coordenada pos, string dir, int alcance) {
    this->direccion = dir;
    this->alcance = alcance;
    this->posicion = pos;
    this->velocidad = vel;
    this->exploto = false;
}

BombaPlanta::~BombaPlanta(){
}

void BombaPlanta::soltarEn(Coordenada coord){
	posicion = coord;
}

void BombaPlanta::mover(Coordenada nueva_coord){
	posicion = nueva_coord;	
}

void BombaPlanta::mover(){
    // FALTA USAR LA VELOCIDAD PARA DETERMINAR CADA CUANTAS ACTUALIZACIONES
    // DE ESTADO DEL JUEGO SE MUEVE
    posicionAnterior = posicion;
    if      (direccion == "arriba")     posicion.incrementarY();
    else if (direccion == "abajo")      posicion.decrementarY();
    else if (direccion == "derecha")    posicion.incrementarX();
    else if (direccion == "izquierda")  posicion.decrementarX();
}


void BombaPlanta::colisionarCon(IOcupante* ocupante) {
    ocupante->colisionarConBombaPlanta();
    // NO SE SI ESTO ESTA AL PEDO O NO
}

void BombaPlanta::actuar(Mapa& mapa) {
    //if (!mapa.moverElemento(this)) {
    this->mover();
    if (mapa.fueraDeRango(this->posicion)) {
        this->retroceder();
        this->explotar(mapa);
    }
    if (mapa.posicionBloqueada(this->posicion)) {
        this->explotar(mapa);
    }
    if (mapa.hayColision(this->posicion))
        this->explotar(mapa);
    //Aca deberia explotar solamente si colisiona con
    // zombies pero por ahora lo dejo asi (colisiona 
    // con todo).
}

void BombaPlanta::retroceder() {
    posicion = posicionAnterior;
   
}

Coordenada BombaPlanta::getPosicion() {
    return posicion;
}
